public abstract class Fish implements Cloneable {
    protected int age;
    protected boolean isDead;
    protected Position position;

    public Fish(Position position) {
        age = 0;
        this.position = position;
    }

    public Position getPosition() {
        return position;
    }

    public String toString() {
        return String.format("This fish is in %s position ", position);
    }

    public void grow() {
        age++;
    }

    public CreaturesType getType() {
        return CreaturesType.Fish;
    }

    @Override
    public Fish clone() throws CloneNotSupportedException {
        Fish obj = (Fish) super.clone();
        obj.position = position;
        obj.age = age;
        return obj;
    }

    public void setEaten() {
    }

    public abstract void eat();

    public abstract void die();

    public abstract void move(MotionInformation motionInformation);

    public abstract Fish spawn();

    public abstract boolean isTimeToSpawn();

    public abstract boolean canEat(boolean victimOnPosition);

    public abstract boolean isDead();

    public abstract int getMaxStep();
}
